package com.choudou5.utils;

import cn.hutool.core.date.DateTime;

import java.util.Date;

/**
 * @Name：时间工具类
 * @@author choudou5
 * @@date 2018-07-21
 */
public class DateUtil extends cn.hutool.core.date.DateUtil {

    public static String timeToDateStr(long time) {
        return new DateTime(time).toString();
    }

    public static final String DATE_FORMAT_SOLR = "yyyy-MM-dd'T'HH:mm:ss'Z'";

    /**
     * 将过去的时间转为为，刚刚，xx秒，xx分钟，xx小时前、xx天前，大于3天的显示日期
     */
    public static String formatTimeAgo(Date dateTime) {
        if(dateTime == null){
            return "";
        }
        String interval = null;
        // 得出的时间间隔是毫秒
        long time = System.currentTimeMillis() - dateTime.getTime();
        // 如果时间间隔小于10秒则显示“刚刚”time/10得出的时间间隔的单位是秒
        if (time / 1000 < 10 && time / 1000 >= 0) {
            interval = "刚刚";
        }
        // 如果时间间隔大于24小时则显示多少天前
        else if (time / 3600000 < 24*4 && time / 3600000 >= 24) {
            int d = (int) (time / (3600000*24));// 得出的时间间隔的单位是天
            interval = d + "天前";
        }
        // 如果时间间隔小于24小时则显示多少小时前
        else if (time / 3600000 < 24 && time / 3600000 >= 1) {
            int h = (int) (time / 3600000);// 得出的时间间隔的单位是小时
            interval = h + "小时前";
        }
        // 如果时间间隔小于60分钟则显示多少分钟前
        else if (time / 60000 < 60 && time / 60000 >=1) {
            int m = (int) ((time % 3600000) / 60000);// 得出的时间间隔的单位是分钟
            interval = m + "分钟前";
        }
        // 如果时间间隔小于60秒则显示多少秒前
        else if (time / 1000 < 60 && time / 1000 >=10) {
            int se = (int) ((time % 60000) / 1000);
            interval = se + "秒前";
        }
        // 大于3天的，则显示正常的时间，但是不显示秒
        else {
            interval = formatDate(dateTime);
        }
        return interval;
    }

    public static String toSolrDate(Date date){
       return format(date, DATE_FORMAT_SOLR);
    }

    public static Date formatToSolrDate(String dateStr){
        return parse(dateStr, DATE_FORMAT_SOLR);
    }


    /**
     * 该方法 至多 用到 2038年初， 不然会超过 int 最大值:2147483647
     * @return
     */
    public static int getIntMs(){
        return Long.valueOf(System.currentTimeMillis()/1000).intValue();
    }

    public static long getUnixTimeStamp(){
        return Long.valueOf(System.currentTimeMillis() / 1000);
    }

    public static DateTime lastYear() {
        return offsetMonth(new DateTime(), -12);
    }

}
